package core.api.performance;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;

public class ResourcePerformanceDescription {

	private  String keyName ;
	private Hashtable<String,MappingElementPerformanceName> elementsMap = 
		new Hashtable<String,MappingElementPerformanceName>(); 


	public ResourcePerformanceDescription(String keyName) {
		this.keyName = keyName;
	}


	public  String getResourceTypeName(){
		return keyName;
	}

	/**
	 * restituisce l'elenco dei nome degli elementi che descrivono la risorsa
	 * @return
	 */
	public List<String> getAllElementsName(){
		ArrayList<String> list = new  ArrayList<String>();
		for (Enumeration<MappingElementPerformanceName> e = elementsMap.elements(); e.hasMoreElements();)
			list.add(e.nextElement().performanceElementName);
		return list;
	}

	/**
	 * dato il nome di un elemento della risorsa mi restituisce il nome della variabile
	 * che descrive gli utilizzi di quella risorsa sul sistema di monitoraggio 
	 * @param elementName
	 * @return
	 */
	public  String getPerformanceElementName(String elementName){
		MappingElementPerformanceName elementMap = elementsMap.get(elementName);
		return elementMap.getElementPerformanceName();

	}

	/**
	 * True if element name have a performance indicator on Monitoring System
	 * False if element name has not e performance indicator
	 * @param name
	 * @return
	 */
	public boolean isPerformanceDataElement(String elementName){
		MappingElementPerformanceName elementMap = elementsMap.get(elementName);
		return elementMap.isPerformanceData();	
	}
	
	public boolean isVisbleElement(String elementName){
		MappingElementPerformanceName elementMap = elementsMap.get(elementName);
		return elementMap.isVisible();	
	}
	
	public boolean isNoCustomerElement(String elementName){
		MappingElementPerformanceName elementMap = elementsMap.get(elementName);
		return elementMap.isNoCustomerData();	
	}

	/**
	 * 
	 */
	public void addMappingElement ( String elementName, String  performanceName, boolean isPerformanceData, boolean isVisible, boolean  isNoCustomer){
		elementsMap.put(elementName, (new MappingElementPerformanceName(elementName, performanceName, isPerformanceData, isVisible, isNoCustomer)).getMappingElementPerformanceName());
	}




	/**
	 * Classe per definire per un dato elemento della risorsa:
	 * 1) performanceName: il nome della variabile sul sistema di monitoring
	 * 2) isPerformace: se l'element e' oggetto di monitoraggio, ha un equivalente performance name
	 * 	 * @author 00917720
	 *
	 */
	private class MappingElementPerformanceName {
		private String elementName;
		private String performanceElementName;
		private boolean isPerformanceData; // ha associato un performance indicator
		private boolean isVisible;	// e' visibile di default nella gui utente
		private boolean isNoCustomerData; // un campo che non deve mai essere mostrato al cliente, campo tecnico

		public MappingElementPerformanceName(String elementName, String  performanceName, boolean isPerformanceData, boolean isVisible, boolean isNoCustomerData ) {
			this.elementName=elementName;
			this.performanceElementName=performanceName;
			this.isPerformanceData=isPerformanceData;
			this.isVisible = isVisible;
			this.isNoCustomerData=isNoCustomerData;
		}

		public MappingElementPerformanceName getMappingElementPerformanceName() {
			return this;
		}
		
		public String getElementPerformanceName(){
			return this.performanceElementName;
		}

		public boolean isPerformanceData() {
			return this.isPerformanceData;
		}
		
		public boolean isVisible() {
			return this.isVisible;
		}
		
		public boolean isNoCustomerData() {
			return this.isNoCustomerData;
		}
		
		

	}


}
